package initialize

import (
	"reflect"

	"github.com/go-playground/locales/zh"
	ut "github.com/go-playground/universal-translator"
	"github.com/go-playground/validator/v10"
	zhTranslations "github.com/go-playground/validator/v10/translations/zh"
	"go.uber.org/zap"
	"xincan.com.cn/tarot-go-framework/config"
	"xincan.com.cn/tarot-go-framework/global"
	"xincan.com.cn/tarot-go-framework/utils/rule"
)

// InitValidator
// Title    			InitValidator
// Description   		初始化验证器
// Auth      			alittlexincan@163.com       			时间（2024/07/17 11:36）
// Update    			alittlexincan@163.com       			时间（2024/07/17 11:36）
// Return    			naming_client.INamingClient     		无返回值
func InitValidator() *config.ValidatorObject {
	validate := validator.New(validator.WithRequiredStructEnabled())
	uni := ut.New(zh.New())
	trans, _ := uni.GetTranslator("zh")
	// 注册中文翻译
	if err := zhTranslations.RegisterDefaultTranslations(validate, trans); err != nil {
		global.Logger.Error("验证框架: 注册中文插件失败", zap.Error(err))
	}
	// 注册自定义标签
	validate.RegisterTagNameFunc(func(fld reflect.StructField) string {
		return fld.Tag.Get("label")
	})
	// 注册自定义验证器
	if err := validate.RegisterValidation("v-password", rule.PasswordValidator); err != nil {
		global.Logger.Error("验证框架: 注册自定义验证器失败: [v-password]: ", zap.Error(err))
	}
	//
	//_ = validate.RegisterTranslation("v-isnull", trans, func(ut ut.Translator) error {
	//	return ut.Add("v-isnull", "{0}或{1}有一个不能为空!", false)
	//}, func(ut ut.Translator, fe validator.FieldError) string {
	//	t, _ := ut.T("v-isnull", fe.Field(), fe.Param())
	//	return t
	//})
	valid := &config.ValidatorObject{
		Validate: validate,
		Trans:    &trans,
		Logger:   global.Logger,
	}
	global.Valid = valid
	return valid
}
